home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / prospero / propsero.lha / prospero-beta.4.2e / user / list_acl.c < prev    next >
C/C++ Source or Header  |  1992-02-10  |  2KB  |  109 lines

  1. /*
  2.  * Copyright (c) 1991 by the University of Washington
  3.  *
  4.  * For copying and distribution information, please see the file
  5.  * <uw-copyright.h>.
  6.  */
  7.  
  8. #include <uw-copyright.h>
  9. #include <stdio.h>
  10. #include <strings.h>
  11.  
  12. #include <pfs.h>
  13. #include <perrno.h>
  14. #include <pmachine.h>
  15.  
  16. int    perrno;
  17. int    pfs_debug = 0;
  18.  
  19. extern    char    *acltypes[];
  20.  
  21. /*
  22.  * List ACL
  23.  */
  24. main(argc,argv)
  25.     int        argc;
  26.     char    *argv[];
  27.     {
  28.     char        *dname = "";        /* Directory name                */
  29.     char        *lname = NULL;
  30.     VLINK        dlink;
  31.     ACL        a;
  32.  
  33.     argc--;argv++;
  34.  
  35.     while (argc > 0 && **argv == '-') {
  36.         switch (*(argv[0]+1)) {
  37.         
  38.         case 'D':
  39.         pfs_debug = 1; /* Default debug level */
  40.         sscanf(argv[0],"-D%d",&pfs_debug);
  41.         break;
  42.  
  43.         case 'd':
  44.         dname = argv[1];
  45.         argc--;argv++;
  46.         break;
  47.  
  48.         /* This is but it makes it consistent with set_acl */
  49.         case 'l': /* Next arg is a link name */
  50.         lname = argv[1];
  51.         argc--;argv++;
  52.         break;
  53.  
  54.         default:
  55.         fprintf(stderr, "Usage: list_acl [-d dir] [link-name]\n");
  56.         exit(1);
  57.         }
  58.         argc--, argv++;
  59.     }
  60.  
  61.     if(argc > (lname ? 0 : 1)) {
  62.         fprintf(stderr, "Usage: list_acl [-d dir] [link-name]\n");
  63.         exit(1);
  64.     }
  65.  
  66.     if(argc == 1) lname = argv[0];
  67.  
  68.     dlink = rd_vlink(dname);
  69.     if(!dlink) {
  70.         fprintf(stderr, "list_acl: Failed to read directory link\n");
  71.         exit(1);
  72.     }
  73.  
  74.     if(lname) a = get_acl(dlink,lname,1);
  75.     else a = get_acl(dlink,NULL,0);
  76.  
  77.     if(!a && perrno) {
  78.         perrmesg("list_acl failed: ", 0, NULL);
  79.         exit(1);
  80.     }
  81.  
  82.     if(pwarn) pwarnmesg("WARNING: ",0,NULL);
  83.  
  84.     printf("Access Control list for %s%s%s\n\n", (*dname ? dname : "."), 
  85.            (lname ? " -> " : ""), (lname ? lname : ""));
  86.  
  87.     while(a) {
  88.         char    typestring[40];
  89.         char    *rightst = "";
  90.         char    *princst = "";
  91.  
  92.         if(a->rights) rightst = a->rights;
  93.         if(a->principals) princst = a->principals;
  94.  
  95.         if(a->atype && *(a->atype))
  96.         sprintf(typestring,"%s(%s)",acltypes[a->acetype],a->atype); 
  97.         else strcpy(typestring,acltypes[a->acetype]);
  98.  
  99.         printf("  %-26s %-16s %s\n",typestring,rightst,princst);
  100.  
  101.         a = a->next;
  102.     }
  103.         
  104.     printf("\n");
  105.  
  106.     exit(0);
  107.     }
  108.  
  109.